/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.fd.domain.query;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 *
 *
 * @author ssl
 * @date 2021-1-18
 */
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class RepositoryQuery {

	private static final int DEFAULT_PAGE_SIZE = 20;
	private static final int MAX_PAGE_SIZE = 1000;

	/**
	 * 返回记录的起始位置。
	 */
	private Integer offset;

	/**
	 * 返回记录的个数。
	 */
	private Integer rows;

	/**
	 * 类型：1-内置知识库，2-自定义
	 */
	private Integer type;
	/**
	 * 知识库名称
	 */
	private String repositoryName;
	/**
	 * 所属关系：0-个人，1-团队或部门
	 */
	private Integer belongType;
	/**
	 * 所属关系：0-个人，1-团队或部门
	 */
	private List<Integer> belongTypeList;
	/**
	 * 所属关系Id，个人，团队或部门
	 */
	private Long belongTo;

	/**
	 * 构建一个查询。
	 *
	 * @param	pageIndex	页索引
	 */
	public RepositoryQuery(Integer pageIndex) {
		this(pageIndex, DEFAULT_PAGE_SIZE);
	}

	/**
	 * 构建一个查询。
	 *
	 * @param	pageIndex	页索引
	 * @param	pageSize	页大小
	 */
	public RepositoryQuery(Integer pageIndex, Integer pageSize) {
		int index = pageIndex == null ? 0 : pageIndex;
		int size = pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
		this.offset = index * size;
		this.rows = size;
	}

	/**
	 * 构造符合条件的查询对象，仅返回一条
	 *
	 * @return
	 */
	public static RepositoryQueryBuilder one() {
		return RepositoryQuery.builder().offset(0).rows(1);
	}

	/**
	 * 构造符合条件的查询对象，控制返回的记录上限
	 *
	 * @return
	 */
	public static RepositoryQueryBuilder max() {
		return RepositoryQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
	}

	/**
	 * 如果是团队，判断是否为管理员 0 不是， 1 是
	 */
	private Integer isTeamAdmin;

}
